package com.yin.myproject.thread.spinlock;

import java.util.concurrent.atomic.AtomicBoolean;

/**
 * ASLock （Test And Set Lock），测试-设置锁，它的特点是自旋时，每次尝试获取锁时，采用了CAS操作，不断的设置锁标志位，当锁标志位可用时，一个线程拿到锁，其他线程继续自旋
 *
 * @author Eason
 * @create 2018-02-09 10:24
 **/
public class TASLock implements Lock {

    private AtomicBoolean mutex = new AtomicBoolean(false);

    @Override
    public void lock() {
        while (mutex.getAndSet(true)) {

        }
    }

    @Override
    public void unlock() {
        mutex.set(false);
    }

    @Override
    public String toString() {
        return "TASLock";
    }
}
